package cmd

import (
	"fmt"
	"gart/service"
	"gart/utils"
	"os"

	"github.com/jedib0t/go-pretty/v6/table"
	"github.com/spf13/cobra"
)

// 文章来源：本地（local）、HTTP（http）、S3（s3）
var (
	src string
)

func init() {
	upCmd.Flags().StringVarP(&src, "source", "s", "local", "Markdown 文件来源，有效值：local,http,s3，默认值本地local。")
	rootCmd.AddCommand(upCmd)
}

func isValidSource(src string) bool {
	if src == "local" || src == "http" || src == "s3" {
		return true
	}
	return false
}

// 可以添加从HTTP、S3获取md文件功能，这样就实现了抓取。
var upCmd = &cobra.Command{
	Use:   "upload",
	Short: "上传文章，可在豆子碎片小程序中查看。",
	Long: `上传文章，可在豆子碎片小程序中查看。参数依次为题目，关键字，Markdown文件，是否公开，是否加锁。
	参数题目，关键字，Markdown文件必填，是否公开，是否加锁选填，默认为否。
	`,
	Example: `gart upload 标题 关键字 md文件名称`,
	Args:    cobra.RangeArgs(3, 5),
	Run: func(cmd *cobra.Command, args []string) {
		CheckBindAccount()
		var (
			title    string
			keyword  string
			filename string
			ispub    int
			islock   int
		)
		title = args[0]
		keyword = args[1]
		filename = args[2]
		l := len(args)
		switch l {
		case 4:
			ispub = utils.Str2Int(args[3])
		case 5:
			ispub = utils.Str2Int(args[3])
			islock = utils.Str2Int(args[4])
		}

		// 检查文件来源，如果不是本地，需要先下载，再上传。
		ok := isValidSource(src)
		if !ok {
			fmt.Println("文件来源类型错误，有效值：local,http,s3")
			os.Exit(1)
		}

		switch src {
		case "local":
			b, _ := utils.PathExists(filename)
			if !b {
				fmt.Println(filename, "文件不存在，请检查")
				os.Exit(1)
			}
		case "http":

		case "s3":

		}

		fmt.Println("上传参数如下：")
		var isPubStr string = "否"
		var isLockStr string = "否"
		if ispub == 1 {
			isPubStr = "是"
		}
		if islock == 1 {
			isLockStr = "是"
		}
		t := table.NewWriter()
		t.SetOutputMirror(os.Stdout)
		t.AppendHeader(table.Row{"题目", "关键字", "文件名称", "是否公开", "是否加锁"})
		t.AppendRows([]table.Row{
			{title, keyword, filename, isPubStr, isLockStr},
		})
		t.AppendSeparator()
		t.Render()

		err := service.UploadArt(token, title, keyword, filename, ispub, islock)
		if err != nil {
			fmt.Println("上传发生错误,", err)
		} else {
			fmt.Println("上传成功")
		}
	},
}
